package com.zb.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zb.entity.*;
import com.zb.vo.GoodsBoomListVo;
import com.zb.vo.GoodsBoomSelectVo;
import com.zb.vo.GoodsListVo;
import com.zb.vo.GoodsSelectVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * <p>
 * 产品表 Mapper 接口
 * </p>
 *
 * @author WEN
 * @since 2023-08-15
 */
@Repository
public interface ZjProductMapper extends BaseMapper<ZjProduct> {

    /**
     * 批量启用或禁用产品
     * @param idList 商品ID集合
     * @param status 状态：false-启用，true-禁用
     * @return
     */
    int updateBatchDisabledByIds(@Param("idList") List<Long> idList, @Param("status") boolean status);

    /**
     * 根据品牌ID更新商品品牌名称
     * @param brandId 品牌ID
     * @param brand 品牌名称
     * @return
     */
    int updateBrandByBrandId(@Param("brandId") Long brandId, @Param("brand") String brand);

    /**
     * 根据分类ID更新商品分类名称
     * @param typeId 分类ID
     * @param type 分类名称
     */
    int updateTypeByTypeId(@Param("typeId") Long typeId, @Param("type") String type);

    /**
     * 根据商品单位ID更改商品单位名称
     * @param unitId 单位ID
     * @param unit 单位名称
     */
    int updateUnitByUnitId(@Param("unitId") Long unitId, @Param("unit") String unit);

    /**
     * 获取产品列表
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    List<GoodsListVo> pageList(@Param("custAccId") Long custAccId, @Param("selectVo") GoodsSelectVo selectVo);

    /**
     * 获取产品列表总记录数
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    long pageListCount(@Param("custAccId") Long custAccId, @Param("selectVo") GoodsSelectVo selectVo);

    /**
     * 查询产品型号是否重复
     * @param custAccId 商家ID
     * @param id 产品ID
     * @param model 型号
     * @return
     */
    Integer existByModel(@Param("custAccId") Long custAccId, @Param("id") Long id, @Param("model") String model);

    /**
     * 查询产品编码是否重复
     * @param custAccId 商家ID
     * @param id 产品ID
     * @param code 编码
     * @return
     */
    Integer existByCode(@Param("custAccId") Long custAccId, @Param("id") Long id, @Param("code") String code);

    /**
     * 查询产品货号是否重复
     * @param custAccId 商家ID
     * @param id 产品ID
     * @param itemNumber 货号
     * @return
     */
    Integer existByItemNumber(@Param("custAccId") Long custAccId, @Param("id") Long id, @Param("itemNumber") String itemNumber);

    /**
     * 根据商家ID查询产品下拉数据
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    List<ZjProduct> pageSelect(@Param("custAccId") Long custAccId, @Param("selectVo") SelectVo selectVo);

    /**
     * 根据商家ID查询产品下拉数据总记录数
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    long pageSelectCount(@Param("custAccId") Long custAccId, @Param("selectVo") SelectVo selectVo);

    /**
     * 分页获取产品ID集合
     * @param goodsSelect
     * @return
     */
    List<Long> pageGetIds(GoodsSelect goodsSelect);

    /**
     * 根据商品分类Id获取关联商品型号
     * @param typeIds 商品分类ID
     * @return
     */
    List<ZjProduct> getRelationTypeByTypeIds(@Param("typeIds") List<Long> typeIds);

    /**
     * 根据商品单位ID获取关联商品型号
     * @param unitIds 商品单位ID
     * @return
     */
    List<ZjProduct> getRelationUnitByUnitIds(@Param("unitIds") List<Long> unitIds);

    /**
     * 根据品牌商家ID获取对应的品牌
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    List<ZjProduct> pageMobileGoodsBrandSelect(@Param("custAccId") Long custAccId, @Param("selectVo") FactorySelectVo selectVo);

    /**
     * 根据品牌商家ID获取对应的品牌
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    long pageMobileGoodsBrandSelectCount(@Param("custAccId") Long custAccId, @Param("selectVo") FactorySelectVo selectVo);

    /**
     * 根据品牌商家ID与
     * @param custAccId 商家ID
     * @param brandId 品牌ID
     * @param selectVo 搜索条件
     * @return
     */
    List<ZjProduct> pageMobileGoodsTypeSelect(@Param("custAccId") Long custAccId, @Param("brandId") Long brandId, @Param("selectVo") FactorySelectVo selectVo);

    /**
     * 根据品牌商家ID与
     * @param custAccId 商家ID
     * @param brandId 品牌ID
     * @param selectVo 搜索条件
     * @return
     */
    long pageMobileGoodsTypeSelectCount(@Param("custAccId") Long custAccId, @Param("brandId") Long brandId, @Param("selectVo") FactorySelectVo selectVo);
}
